iT邦幫忙

2022 iThome 鐵人賽

DAY 1
0

哈囉,大家好啊。
放暑假前就和幾個朋友們約好要打鐵人賽了,放假後更是卯起來推身邊的人入坑,
結果朋友拉朋友,再去跟其他團隊一起就這麼大坨了(?)
而也在因緣巧合之際,我碰到了 Ethernaut 這個平台,
本來我認為已經大致了解 Solidity 語法了,但是在過關時才發現,原來我
還有很多東西解不出來XD,甚至有少數沒看過的方法和語法,下手研究後
,啊啊啊,太好玩了 (✪ω✪),剛好 Ethernaut 的篇幅也蠻足夠的,那麼就
乾脆來一篇完整的鐵人賽好了 (?) 於是我現在就在這裡了。

Why Solidity PWN

智能合約發布後即無法修改,且 Code 也會完全公開,即使發現
了某個漏洞也幾乎沒有辦法能夠修補,所以才更應該學習 Solidity PWN
,使合約上架前就把漏洞排除,但,學習任何和資訊安全相關的領域通則,
是需要完全的了解,畢竟如果一知半解,要如何修補/攻擊 APP 呢 ?
並且若無基礎的認知,即使在網路上尋找相關資源,八成也是無法理解的,
所以在接下來的文章中,我會預期讀者已經擁有了 Solidity 的最最基
礎的語法概念,不打算對關鍵語法以外的語法多做解釋,希望大家可以快速服用
後就完全理解,加上我不太會寫文章QQ

而 Ethernaut 內的題目涵蓋了 Solidity 非常多的領域
除了最常聽到的溢位和重入攻擊(Re-entrancy)以外,甚至包含
了 Solidity 的組合語言、 ERC20,EIP1967,明面上
是在學習 Solidity 的漏洞,但實際上卻能讓使用者更大程度的掌握語法,
因此若是你已經有 Solidity 的基礎,我相當推薦你玩玩 Ethernaut

Ethernaut

Ethernaut 是 Openzeppelin 團隊維護和開發的平台,
在平台上有 27 個關卡,都是和 Solidity 語法漏洞,其中不乏
許多知名的漏洞如 Re-entrancy,也因為平台的知名性,網路上
也有許多相關資源和 WriteUp,就代表著不用擔心卡關和沒有答案能核對,
因此表示能夠非常完整的掌握每道關卡的訣竅,若是你了解了某道關卡的通關方式
也可以試著用其他邏輯去通關,相信都會對讀者們在掌握 Solidity 上有更大的助益。

為甚麼攻擊合約最好的方式是使用另一個合約

Ethereum 將帳戶分為

  • EOA(externally owned account) :
    外部使用者地址,能夠收發款項和操作智能合約
  • Contract Account
    智能合約地址,也能夠操作智能合約,如果加上 fallback / receive function 後也同樣能進行收發款項,而 Contract Account 和 EOA 最大的差別就是 Contract Account 還能包刮 Code 邏輯,因此能在操作合約、收發款項時加入一些特別的判斷和邏輯,也因此很容易產出很多奇怪的漏洞和攻擊。

Requirement

  • 看得懂 Solidity 基礎語法
  • 有 Metamask 並且有測試幣
  • 本篇文章將於 Rinkeby 測試鏈上進行所有操作,但未來以太坊基金會將棄用 Ropsten、Kiln、Rinkeby 等測試網,大家可以轉而使用 Goerli 或 Sepolia 測試網
  • 操作 Web Console
  • 有操作過 Remix

從合約呼叫另外一份合約

interface TargetContract {
    .....  external;
}
contract Attack {
    TargetContract target = TargetContract(<address>)
    function hack() public {
        target.function_name();
    }
    .....
}

接下來的所有實作將高頻率的用到呼叫另一份合約的語法,所以請先了解上面的語法是如何運作的喔。

interface 就是要呼叫的 Contract 的 function
在主合約內宣告 TargetContract 並給予它目標的地址,就能夠在主合約內,以合約地址的身分呼叫目標合約的 function。

OK 那麼接下來我們將正式進入 Ethernaut 第 0 關,敬請期待。


下一篇
Day2 如何開始遊戲
系列文
智能合約漏洞演練 - Ethernaut18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言